<?php defined('SYSPATH') or die('No direct script access.');

class Model_Main
{
    /*
    * Закачиваем картинку на сервер
    * 
    * Имя инпута, директория, ширина, имя
    * 
    * Пример вызова - upload_image('image', 'media/uploads/articles/')
    * 
    * Возврат - либо имя картинки, либо null
    */
	public static function upload_image($input_name, $directory, $width = null, $filename = null)
    {
        $array = Validation::factory($_FILES);
        
        $array->rule($input_name, 'Upload::not_empty');            
        if ($array->check()) {                    
            // Закачиваем на сервер
            if(!$filename) {
                $filename = time().mt_rand(0, 1000).'.jpg';
            }
                
            $tmp_filename = Upload::save($_FILES[$input_name], $filename, $directory, 0755);
            
            // Закачали, теперь изменим размер            
            if ($width) {
               $image = Image::factory($tmp_filename); 
               $image->resize($width, null)->save();
            }
        } else {
            $filename = null;
        }
        
        return $filename;
    }
    
    public static function translit($str)
    {
        $chars = array(
            'А' => 'A' ,
            'Б' => 'B' ,
            'В' => 'V' ,
            'Г' => 'G' ,
            'Д' => 'D' ,
            'Е' => 'E' ,
            'Ё' => 'YO' ,
            'Ж' => 'ZH' ,
            'З' => 'Z' ,
            'И' => 'I' ,
            'Й' => 'J' ,
            'К' => 'K' ,
            'Л' => 'L' ,
            'М' => 'M' ,
            'Н' => 'N' ,
            'О' => 'O' ,
            'П' => 'P' ,
            'Р' => 'R' ,
            'С' => 'S' ,
            'Т' => 'T' ,
            'У' => 'U' ,
            'Ф' => 'F' ,
            'Х' => 'X' ,
            'Ц' => 'C' ,
            'Ч' => 'CH' ,
            'Ш' => 'SH' ,
            'Щ' => 'SHH' ,
            'Ъ' => "'" ,
            'Ы' => 'Y' ,
            'Ь' => '' ,
            'Э' => 'E' ,
            'Ю' => 'YU' ,
            'Я' => 'YA' ,
            'а' => 'a' ,
            'б' => 'b' ,
            'в' => 'v' ,
            'г' => 'g' ,
            'д' => 'd' ,
            'е' => 'e' ,
            'ё' => 'yo' ,
            'ж' => 'zh' ,
            'з' => 'z' ,
            'и' => 'i' ,
            'й' => 'j' ,
            'к' => 'k' ,
            'л' => 'l' ,
            'м' => 'm' ,
            'н' => 'n' ,
            'о' => 'o' ,
            'п' => 'p' ,
            'р' => 'r' ,
            'с' => 's' ,
            'т' => 't' ,
            'у' => 'u' ,
            'ф' => 'f' ,
            'х' => 'x' ,
            'ц' => 'c' ,
            'ч' => 'ch' ,
            'ш' => 'sh' ,
            'щ' => 'shh' ,
            'ъ' => '' ,
            'ы' => 'y' ,
            'ь' => '' ,
            'э' => 'e' ,
            'ю' => 'yu' ,
            'я' => 'ya',
            ' ' => '-',
            '%' => '' ,
            '!' => '' ,
            '&' => '' ,
            "'" => '' ,
            '"' => '' ,
            '`' => '' ,
            '+' => '' ,
            '/' => '' ,
            '|' => '',
            '.' => '' ,
            ',' => '',
            '(' => '',
            ')' => '',
            '*' => '',
            '#' => '',
            '$' => '',
            '{' => '',
            '}' => '',
            '[' => '',
            ']' => '',
            '~' => '',
            '^' => '',
            ':' => '',
            ';' => '',
            '?' => '',
            '«' => '',
            '»' => '',
            '№' => ''
        );
        $result = strtr($str, $chars);    
        $result = str_replace('--', '-', $result);    
        return strtolower($result);   
    }
    
    /*
    * Преобразует массив - ставит ключом элементов саммива id этого элемента
    * 
    * Пример - было {'0' => array('id' => 1, ...)}
    * стало         {'1' => array('id' => 1, ...)}
    */ 
    public static function process_array($array)
    {
        $result = array();
        foreach ($array as $item) {
            $result[$item->id] = $item;    
        }      
        return $result;  
    }
    
    public static function get_array($data)
    {
        $array = array();
        foreach ($data as $item) {
            $array[] = $item;   
        }          
        return $array;
    }
    
    // Делает первую букву заглавной
    public static function ucfirst_utf8($str)
    {
        $fc = mb_strtoupper(mb_substr($str, 0, 1));
        return $fc.mb_substr($str, 1);   
    }
    
    public static function rand_phrase(array $cases, &$seed)
    {
        mt_srand($seed);
        $seed++;

        $min = 0;
        $max = count($cases) - 1;

        $n = mt_rand($min, $max);

        return $cases[$n];
    }
    
    public static function get_clean_name($name)
    {
        $name = mb_strtolower($name);
        //$name = preg_replace('/\s/i', '', $name);
        $name = str_replace(array(' ', '-', '(', ')', '.', '+', '"', '*', '/', '\\', '|'), '', $name);
        return $name;   
    }
    
    public static function get_csrf_token()
    {
        $token = md5(uniqid(mt_rand() . microtime()));
        Session::instance()->set('token', $token);
        return $token;      
    }
    
    public static function check_csrf_token()
    {
        $token = Request::current()->post('token') ? Request::current()->post('token') : null;
        if (!$token) {
            $token = Request::current()->param('token') ? Request::current()->param('token') : null;    
        }
        if (!$token) {
            throw new Model_Exception('Вероятна подделка запроса, вернитесь назад или попробуйте обновить страницу');
        }
        if (Session::instance()->get('token', null) == $token) {
            return true;    
        }
        throw new Model_Exception('Вероятна подделка запроса, вернитесь назад или попробуйте обновить страницу');
    }
    
    public static function reverse_array($array)
    {
        $result = array();
        foreach ($array as $key => $value) {
            $result[$value] = $key;    
        }    
        return $result;
    }
    
    public static function get_host_url($with_http = true)
    {
        $url = 'promotnx.ru';
        if ($with_http) {
            $url = 'http://'.$url;        
        }
        return $url;    
    }
    
    public static function get_static_host_url($with_http = true)
    {
        return null;
        $url = 'static.buzilio.ru';
        if ($with_http) {
            $url = 'http://'.$url;        
        }
        return $url;
    }
    
    public static function is_production_host()
    {
        if (strstr($_SERVER['HTTP_HOST'], self::get_host_url(false)) !== false) {
            return true;
        }
        return false;
    }
}
